// 引入文件系统模块和流模块
const fs = require('fs');
const { Readable, Writable, Transform } = require('stream');

// 1. 创建from.txt文件（若已存在则覆盖，写入初始内容）
fs.writeFileSync('from.txt', 'hello node.js stream! this is a test file.');

// 2. 自定义转换流：将数据转为大写
const upperCaseTransform = new Transform({
  transform(chunk, encoding, callback) {
    // 将缓冲区转换为字符串并转为大写，再推入下一流
    const upperChunk = chunk.toString().toUpperCase();
    this.push(upperChunk);
    callback();
  }
});

// 3. 创建可读流（读取from.txt）
const readableStream = fs.createReadStream('from.txt', 'utf8');

// 4. 创建可写流（写入to.txt）
const writableStream = fs.createWriteStream('to.txt');

// 5. 通过管道连接流：可读流 → 转换流 → 可写流
readableStream.pipe(upperCaseTransform).pipe(writableStream);

// 监听流完成事件
writableStream.on('finish', () => {
  console.log('文件内容已成功转换并写入to.txt');
});

// 监听错误事件
readableStream.on('error', (err) => {
  console.error('可读流错误:', err);
});

writableStream.on('error', (err) => {
  console.error('可写流错误:', err);
});

upperCaseTransform.on('error', (err) => {
  console.error('转换流错误:', err);
});